1
Чертежи для обобщённого кода
AI037Lesson 18
00:00

Представьте, что вы архитектор. Вместо того чтобы рисовать фиксированный план одного кирпичного дома, вы разрабатываете основной чертёж способный адаптироваться под дерево, сталь или стекло. В C++ это Обобщённое программирование.

1. Механизм чертежа

Определение списка параметров шаблона (например, template <typename T>) вводит заполнители, называемые параметрами типов шаблона. Они действуют как переменные для типов. Например, в template <typename T> ostream &print(ostream &os, const T &obj), T определяется только при вызове функции.

2. Инстанцирование

Компилятор не компилирует сам шаблон в машинный код. Вместо этого происходит инстанцирование происходит: компилятор генерирует конкретную версию кода только тогда, когда предоставляется конкретный аргумент шаблона предоставляется. Из-за этого определения обычно должны находиться в заголовочных файлах.

Чертёжcompare<T>compare(int)compare(vector)Ошибка: Sales_data

3. Написание кода, независимого от типа

Для максимального повторного использования следуйте Лучшей практике: минимизируйте требования. Напишите код, используя только оператор < оператор (через less<T>) снижает требования к типам по сравнению с использованием >, <=, и >=. Проверка часто откладывается; компилятор обычно не может найти многие ошибки на этапе компиляции самого шаблона; большинство из них появляются при инстанцировании.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>